一文简单了解并构建DockerFile

您所在的位置:网站首页 什么是image schema 一文简单了解并构建DockerFile

一文简单了解并构建DockerFile

#一文简单了解并构建DockerFile| 来源: 网络整理| 查看: 265

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 作者: 蟹黄瓜子 文章来源:GreatSQL社区投稿

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

那么今天要介绍的DockerFile是什么呢?简单来说DockerFile用来描述Docker镜像的文件,而且是类似源码的描述。

假设现有一台机器,docker容器中有镜像如下:

[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 7614ae9453d1 12 months ago 113MB mysql 5.7 c20987f18b13 12 months ago 448MB mysql 8.0 3218b38490ce 12 months ago 516MB greatsql/greatsql latest 2390016ed67a 16 months ago 550MB consul 1.9.4 28efe5fcc049 21 months ago 120MB

我们可以简单看看greatsql/greatsql:latest的dockerfile:

[root@localhost ~]# docker history --format {{.CreatedBy}} --no-trunc=true 2390016ed67a|sed "s/\/bin\/sh\ -c\ \#(nop)\ //g"|sed "s/\/bin\/sh\ -c/RUN/g" | tac ADD file:bd7a2aed6ede423b719ceb2f723e4ecdfa662b28639c8429731c878e86fb138b in / LABEL org.label-schema.schema-version=1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20201204 CMD ["/bin/bash"] MAINTAINER [email protected] ENV LANG=en_US.utf8 ENV MYSQL_DATA_DIR=/data/GreatSQL ENV MYSQL_USER=mysql ENV MYSQL_UID_GID=3306 ENV MYSQL_EXTRACT_DIR=/usr/local ENV TMP_DIR=/tmp ENV MYSQL_PORT=3306 ENV GREATSQL=GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64-minimal ENV MYSQL_BASEDIR=/usr/local/GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64-minimal ENV DEP_LIBS=numactl-libs libaio readline-devel ncurses-devel ENV JEMALLOC_RPM=jemalloc-3.6.0-1.el8.x86_64.rpm ENV GREATSQL_INIT=greatsql-init.sh RUN groupadd -g ${MYSQL_UID_GID} ${MYSQL_USER}; useradd -u ${MYSQL_UID_GID} -r -g ${MYSQL_UID_GID} -s /sbin/nologin -c "MySQL User" ${MYSQL_USER} COPY dir:39057b483c2d76e9f0001cb84ed6603761599e330b2e714a6ee5941a4332cd97 in /usr/local/GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64-minimal COPY file:fe881a5e38a8821b0a03018241b9e51c6f815bd0733a73b8ff95c0cb23e53df9 in /tmp RUN yum install -y ${TMP_DIR}/${JEMALLOC_RPM} RUN yum install -y ${DEP_LIBS} RUN cd ${MYSQL_BASEDIR}/support-files && cp -f my.cnf /etc/my.cnf ; echo "LD_PRELOAD=/usr/lib64/libjemalloc.so.1" >> /etc/sysconfig/mysql ; echo "THP_SETTING=never" >> /etc/sysconfig/mysql ; echo "export PATH=\$PATH:${MYSQL_BASEDIR}/bin" >> /etc/profile.d/mysql.sh ; source /etc/profile.d/mysql.sh RUN PATH="\$PATH:${MYSQL_BASEDIR}/bin" RUN export PATH RUN mkdir -p ${MYSQL_DATA_DIR} && chown -R ${MYSQL_USER}:${MYSQL_USER} ${MYSQL_BASEDIR} ; chmod -R ug+rwX ${MYSQL_BASEDIR} ; chmod -R ug+rwX /etc/my.cnf RUN rm -f ${TMP_DIR}/${JEMALLOC_RPM} COPY file:246cf23778cd1862e366d7b64f51aaf616c480874560e8f1ed0992ba7f6e4273 in /docker-entrypoint.sh ENTRYPOINT ["/docker-entrypoint.sh"] EXPOSE 3306 33060 33061 CMD ["mysqld"] 1.Dockerfile介绍

官方网站:https://hub.docker.com/

现在我们简单介绍一下dockerfile:

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),用于构建镜像。每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建。dockerfile 用于指示 docker image build 命令自动构建Image的源代码

# 对该目录下的dockerfile进行镜像的构建 docker build -f Dockerfile

通过dockerfile创建镜像大致上分为三步:写Dockerfile ——>docker build——>docker run

Dockerfile 可以大致分为4个部分:

基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令

dockerfile也有一些需要注意的地方:

dockerfile是通过从上到下的顺序运行指令的。其中第一条指令是 FROM,表示源镜像是基于什么镜像,因此也就有了所有镜像的源镜像:scratch。 每条保留字指令都必须是大写字母, 并且后面要跟随至少一个参数。 每条指令可用 # 添加注释。 每条指令都会创建一个新镜像层, 并对镜像进行提交。 2.Dockerfile指令解析 指令 解析 FROM 指定基础镜像,必须为第一个命令 MAINTAINER 维护者邮箱等信息 RUN 构建镜像docker build时执行的命令 ADD 将本地文件添加到容器中,tar 类型文件会自动解压 COPY 功能类似ADD,但是是不会自动解压文件,也不能访问网络资源 CMD 在docker run时会执行的命令,如果存在多个则仅最后一个生效,例如一个镜像的dockerfile的结尾是“ CMD ["/bin/bash"] ”,那么进入容器可以使用docker exec -it imageName或docker exec -it imageName /bin/bash,后者是在“ CMD ["/bin/bash"] ”的指令下面多加了一个“ CMD ["/bin/bash"] ”,根据CMD的特性,存在多个时,只让最后一个CMD生效,因此不影响 ENTRYPOINT 可执行化 LABEL 用于为镜像添加元数据 ENV 设置环境变量 EXPOSE 指定于外界交互的端口 VOLUME 用于指定持久化目录 WORKDIR 工作目录 ARG 用于指定传递给构建运行时的变量 ONBUILD 用于设置镜像触发器 2.1 FROM # 格式 FROM FROM : FROM @ # 例子 FROM mysql:5.6 2.2 MAINTAINER # 格式 MAINTAINER # 例子 MAINTAINER [email protected] 2.3 RUN # 格式 RUN # 例子 RUN yum install -y mysql 2.4 ADD # 格式 ADD ... # 例子,添加 "name" 到 `WORKDIR`/dir/ ADD name Dir/ 2.5 COPY # 格式 COPY ... # 例子 COPY name in /dir 2.6 CMD # 格式 CMD ["executable","param1","param2"] # 例子 CMD ["mysqld"] 2.7 ENTRYPOINT # 格式 ENTRYPOINT ["executable", "param1", "param2"] # 例子:让什么可执行化 ENTRYPOINT ["ls", "/usr/local"] 2.8 LABEL # 格式 LABEL = = ... # 例子 LABEL version="1.0" 2.9 ENV # 格式 ENV ENV = ... # 例子 ENV name guazi ENV name=guazi 2.10 EXPOSE # 格式 EXPOSE [...] # 例子 EXPOSE 3306 2.11 VOLUME # 格式 VOLUME ["/path"] # 例子 VOLUME ["/mydata"] 2.12 WORKDIR # 格式 WORKDIR /path # 例子 WORKDIR /mydata 2.13 ARG # 格式 ARG [=] # 例子,外部传入一参数testparm,默认值为1 ARG testparm=1 2.14 ONBUILD # 格式 ONBUILD [INSTRUCTION] # 例子 ONBUILD ADD . /app/src 3.制作镜像

以自定义一个centos镜像为例,在官方镜像的基础上添加vim和net-tools工具

首先创建dockerfile: [root@localhost dockerfile]# cat Dockerfile FROM centos:7 MAINTAINER xiehgz ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim net-tools EXPOSE 80 CMD /bin/bash 构建镜像: [root@localhost dockerfile]# docker build -t mycentos:3.0 . Sending build context to Docker daemon 2.048kB Step 1/7 : FROM centos:7 7: Pulling from library/centos 2d473b07cdd5: Pull complete Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987 Status: Downloaded newer image for centos:7 ---> eeb6ee3f44bd Step 2/7 : MAINTAINER xiehgz ---> Running in a43782764a07 Removing intermediate container a43782764a07 ---> ba42beb587ed Step 3/7 : ENV MYPATH /usr/local ---> Running in 9a7b0fab77b6 ........... vim-filesystem.x86_64 2:7.4.629-8.el7_9 which.x86_64 0:2.20-7.el7 Complete! 查看镜像: [root@localhost dockerfile]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mycentos 3.0 b2d59a130341 About a minute ago 453MB 检验是否正常启动: [root@localhost dockerfile]# docker run -it mycentos:3.0 [root@0b8baab6a633 local]# 构建成功

最后,也可以测试阅读GreatSQL官方的dockerfile:https://gitee.com/GreatSQL/GreatSQL-Docker/blob/master/GreatSQL/Dockerfile,这里就不展开了。

Enjoy GreatSQL 😃

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

image-20230105161905827

技术交流群:

微信:扫码添加GreatSQL社区助手微信好友,发送验证信息加群。

image-20221030163217640



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3